博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React 学习之路 (三) 组件&props
阅读量:7115 次
发布时间:2019-06-28

本文共 2491 字,大约阅读时间需要 8 分钟。

组件和props

组件可以将UI切分成一些的独立的、可复用的部件,这样你就只需专注于构建每一个单独的部件。

react中的组件就像是一个函数,他可以接收一个props对象,并返回一个React元素

函数定义/类定义组件

  • 函数定义组件
function welcome(props) {  return 
hello {props.name}
;}

该函数返回一个react组件,它接收一个对象props,并返回一个React元素,我们将这种类型的组件成为是函数定义组件,是因为字面上看来,他就是一个javascript函数。

  • 类组件定义
class welcome extends React.Component{  render() {    return 
hello {this.props.name}
; }}

使用 ES6 class 来定义一个组件:

上面两种方法定义的组件是相同的。

组件渲染

我们之前遇到的react元素都是dom标签。然而react元素也可以是自定义的组件:

const element = 
;

当时一个自定义组件的时候,它会将jsx属性转换为一个props对象传递给该组件。

function Welcome (props) {  return 

hi, {props.name}

;}const element =
ReactDOM.render( element, document.getElementById('app'));
回顾一下上段代码发生了什么
1. 我们对
元素调用了ReactDOM.render()方法。2. React将{name: 'Sara'}作为props传入并调用Welcome组件。3. Welcome组件将

Hello, Sara

元素作为结果返回。4. React DOM将DOM更新为

Hello, Sara

注意: 组件名称必须以大写字母开头。

组合组件

  
Document
注意: 组件的返回值只能有一个根元素。这也是我们要用一个<div>来包裹所有<Welcome />元素的原因。

提取组件

// 一个Comment组件:(头像、名字、评论内容、时间)    function Comment (props) {      return (        
{props.author.name}
{props.author.name}
{props.text}
{formatDate(props.date)}
) } function formatDate(date) { return date.toLocaleDateString(); } const comment = { date: new Date(), text: 'I hope you enjoy learning React!', author: { name: 'Hello Kitty', avatorurl: 'http://placekitten.com/g/64/64' } }; ReactDOM.render(
, document.getElementById('app') );

这个组件由于嵌套,变得难以被修改,可复用的部分也难以被复用。所以让我们从这个组件中提取出一些小组件。

  • Avator组件
function Avatar(props) {  return (    {props.user.name}  );}

这样就成了

function Comment(props) {  return (    
//这里使用提取出来的组件
{props.author.name}
{props.text}
{formatDate(props.date)}
);}

我们还可以继续提取

function UserInfo(props) {  return (    
{props.user.name}
);}

这样我们的组件就是

function Comment(props) {  return (    
{props.text}
{formatDate(props.date)}
);}

props的可读性

无论是使用函数或是类来声明一个组件,它决不能修改它自己的props。props只是可读的。
function withdraw(account, amount) {  account.total -= amount;}// 不允许props被这种方式再组件中修改

转载地址:http://ycwel.baihongyu.com/

你可能感兴趣的文章
Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
查看>>
【公开课视频】ASP.NET MVC+EF入门-20130315
查看>>
Thinkphp 公共函数自动加载
查看>>
Linux内核之数据双链表
查看>>
【云计算的1024种玩法】巧用迁云工具轻松实现服务器迁移到ECS
查看>>
MaxCompute,基于Serverless的高可用大数据服务
查看>>
Linux下MySQL表名区分大小写
查看>>
故事板控件无法和代码关联的问题解决
查看>>
锁分段技术、ConcurrentHashMap、扩容
查看>>
centos LAMP菜鸟搭建过程
查看>>
不使用库函数将字符串转换为数字
查看>>
Redis和MongoDB通讯协议简介
查看>>
H3C交换机S5500策略路由配置
查看>>
我的友情链接
查看>>
十年一遇的奇葩故障--Windows网络编程接口故障:telnet显示无法加载或初始化请求的服务提供程序...
查看>>
热点热词 新闻热点 最新新闻数据API接口-天狗热点热词开放平台
查看>>
理解RESTful架构
查看>>
谨记这10条,就能给别人留下好印象?
查看>>
一个数组中,除两个元素其余都出现了两次,找出这两个元素
查看>>
Why Ceph and how to use Ceph?
查看>>